﻿using System;
using System.Data;
using Onshi.POS.AccesoDatos;
using Onshi.POS.AccesoDatos.Interfaces;
using Onshi.POS.Modelo.Entidades;

namespace Onshi.POS.Repositorios
{
    public class RepositorioRegistro : RepositorioEntidad<Registro, Int32>
    {
        #region Constructores

        public RepositorioRegistro()
            : base()
        {
            servicioDatosRegistro = new ServicioDatosRegistro();
        }

        #endregion

        #region Atributos

        private IServicioDatosRegistro servicioDatosRegistro;

        #endregion

        #region Propiedades

        private IServicioDatosRegistro ServicioDatosRegistro
        {
            get { return servicioDatosRegistro; }
        }

        private RepositorioTipoRegistro RepositorioTipoRegistro
        {
            get { return new RepositorioTipoRegistro(); }
        }

        private RepositorioUsuario RepositorioUsuario
        {
            get { return new RepositorioUsuario(); }
        }

        #endregion

        #region Metodos

        protected override Registro FilaAEntidad(DataRow fila)
        {
            var registro = new Registro();
            registro.Id = (Int32)fila["IdUsuario"];
            registro.Usuario = RepositorioUsuario.DevolverPorId((Int32)fila["IdUsuario"]);
            registro.Tipo = RepositorioTipoRegistro.DevolverPorId((Byte)fila["IdTipoRegistro"]);
            registro.Fecha = (DateTime)fila["Fecha"];
            return registro;
        }

        public override Registro DevolverPorId(Int32 id)
        {
            //var entidad = (from item in entidades
            //               where item.Id == id
            //               select item).FirstOrDefault();
            //if (entidad == null)
            //{
            //    using (var ds = ServicioDatosUsuario.Usuarios_DevolverPorId(id))
            //    {
            //        if (ds.Tables[0].Rows.Count != 0)
            //        {
            //            entidad = FilaAEntidad(ds.Tables[0].Rows[0]);
            //            entidades.Add(entidad);
            //        }
            //    }
            //}
            //return entidad;
            return null;
        }

        public void Insertar(Registro entidad)
        {
            entidad.Id = ServicioDatosRegistro.Registros_Insertar(entidad.Tipo.Id, entidad.Usuario.Id);
        }

        public void Insertar(Registro entidad, Vendedor vendedor)
        {
            Insertar(entidad);
            ServicioDatosRegistro.RegistrosVendedores_Insertar(entidad.Id, vendedor.Id);
        }

        public void Insertar(Registro entidad, Usuario usuario)
        {
            Insertar(entidad);
            ServicioDatosRegistro.RegistrosUsuarios_Insertar(entidad.Id, usuario.Id);
        }

        public void Insertar(Registro entidad, Articulo articulo)
        {
            Insertar(entidad);
            ServicioDatosRegistro.RegistrosArticulos_Insertar(entidad.Id, articulo.Id);
        }

        public void Insertar(Registro entidad, Cliente cliente)
        {
            Insertar(entidad);
            //TODO FALTA ACA IMPLEMENTAR GUARDAAAAAA!!!!!
            //ServicioDatosRegistro.RegistrosArticulos_Insertar(entidad.Id, articulo.Id);
        }
        #endregion
    }
}
